package py.una.pol.pweb.compraventa;

import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import py.una.pol.pweb.compraventa.modelo.Proveedor;
import py.una.pol.pweb.compraventa.modelo.Proveedor;
import py.una.pol.pweb.compraventa.modelo.Proveedor;
//import py.una.pol.pweb.compraventa.modelo.Cliente;
import py.una.pol.pweb.compraventa.modelo.Proveedor;

/**
 *
 * @author claudia
 */
@ManagedBean
@SessionScoped
public class ProveedorBean implements Serializable {

    public ProveedorBean() {
    }
    private Proveedor proveedor = new Proveedor();
    private Proveedor proveedorSelected = new Proveedor();

    public Proveedor getProveedor() {
        return proveedor;
    }

    public void setProveedor(Proveedor proveedor) {
        this.proveedor = proveedor;
    }

    public Proveedor getProveedorSelected() {
        return proveedorSelected;
    }

    public void setProveedorSelected(Proveedor proveedorSelected) {
        this.proveedorSelected = proveedorSelected;
    }

    public void guardarProveedor() {

        /*FacesContext context = FacesContext.getCurrentInstance();
         context.addMessage("somekey", facesMessage1);

         */
        FacesContext context = FacesContext.getCurrentInstance();
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        try {

            em.getTransaction().begin();
            proveedor = new Proveedor();
            proveedor.setNombre(proveedorSelected.getNombre());
            proveedor.setDireccion(proveedorSelected.getDireccion());
            proveedor.setTelefono(proveedorSelected.getTelefono());
            em.persist(proveedor);
            em.getTransaction().commit();

            proveedorSelected = new Proveedor();
            //context.addMessage("addProveedor", new FacesMessage(FacesMessage.SEVERITY_INFO, "El Proveedor fue agregado con exito!", null));
            context.addMessage(null, new FacesMessage("Exito!", proveedor.getNombre() + ", agregado correctamete."));

        } catch (Exception e) {

            e.printStackTrace();
        } finally {
            em.close();
        }
    }

    @SuppressWarnings("unchecked")
    public List<Proveedor> getAllProveedores() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Query allClientesQuery = em.createQuery("select d from Proveedor d");

        List<Proveedor> allProvedores = allClientesQuery.getResultList();

        tx.commit();
        em.close();
        proveedor = new Proveedor();
        return allProvedores;
    }

    public void modificarProveedor() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            em.getTransaction().begin();
            Proveedor userx = em.find(Proveedor.class, proveedorSelected.getIdproveedor());
            userx.setNombre(proveedorSelected.getNombre());
            userx.setDireccion(proveedorSelected.getDireccion());
            userx.setTelefono(proveedorSelected.getTelefono());
            em.getTransaction().commit();
            proveedorSelected = new Proveedor();
            context.addMessage(null, new FacesMessage("Modificado exitosamente!", proveedor.getNombre() + ", agregado correctamete."));
        } finally {
            em.close();

        }
    }

    public String proveedorSelectedNombreChanged() {

        return proveedorSelected.getNombre();

    }

    public void limpiarForm() {
        proveedorSelected = new Proveedor();

    }

    public void agregarExito() {

        FacesMessage msg = new FacesMessage("Proveedor Agregado", proveedor.getNombre());
        FacesContext.getCurrentInstance().addMessage(null, msg);

    }

    public void eliminarProveedor() {
        FacesContext context = FacesContext.getCurrentInstance();
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();
            Proveedor userx = em.find(Proveedor.class, proveedorSelected.getIdproveedor());
            em.remove(userx);
            em.getTransaction().commit();
            limpiarForm();
            context.addMessage(null, new FacesMessage("Eliminado exitosamente!", proveedor.getNombre() + ", agregado correctamete."));

        } finally {
            em.close();

        }

    }
}